package org.javahispano.javacup.tacticas_aceptadas.sjvc.SubTacticasDefensa;
import org.javahispano.javacup.modelo.*;

import org.javahispano.javacup.tacticas_aceptadas.sjvc.Comandos;
import org.javahispano.javacup.tacticas_aceptadas.sjvc.SituacionPartidoSergio;
import org.javahispano.javacup.tacticas_aceptadas.sjvc.SubTacticaDefensa;

import java.util.LinkedList;
import java.util.List;

public class STDLosTresPorteros extends SubTacticaDefensa {

	protected int kDistanciaAlPorteroX = 1;
	protected int kDistanciaAlPorteroY = 1;
	
	public STDLosTresPorteros(){
		
	}
	
	@Override
	protected List<Comando> _ejecutar(SituacionPartido sp, SituacionPartidoSergio spAnterior) {
		
		List<Comando> comandos = new LinkedList<Comando>();
		
		//Si la pelota esta cerca reforzamos la defensa
		if(Constantes.centroArcoInf.distancia(sp.balon()) < Constantes.LARGO_CAMPO_JUEGO/2){
			for(int i=1; i<=2 ;i++){
				
				//Se ponen en la porteria y siguen al portero
				double distanciaAlBalonX = new Posicion(sp.balon().getX(), 0).distancia(new Posicion(sp.misJugadores()[i].getX(),0));
				double distanciaAdelantado =  ((distanciaAlBalonX > Constantes.ANCHO_CAMPO_JUEGO/2 ? Constantes.ANCHO_CAMPO_JUEGO/2 : distanciaAlBalonX) / Constantes.ANCHO_CAMPO_JUEGO/2 ) * (sp.balon().getX() < 0 ? (i==1 ? -kDistanciaAlPorteroX : kDistanciaAlPorteroX) : (i==1 ? kDistanciaAlPorteroX : -kDistanciaAlPorteroX));
				comandos.add(new ComandoIrA(i, new Posicion( sp.misJugadores()[0].getX() + ( i==1 ? -kDistanciaAlPorteroY : kDistanciaAlPorteroY), sp.misJugadores()[0].getY() + distanciaAdelantado )));
				
				//Si cogen la pelota, tiran al centro del campo
				if(sp.balon().distancia(sp.misJugadores()[i]) <= Constantes.DISTANCIA_CONTROL_BALON)
					Comandos.DespejarDesdeLaPorteria(sp, i, comandos);
			}
		}
			
		return comandos;
	}
	
}